package com.fishingwithme.domain.settings;

import com.fishingwithme.infrastructure.dtos.AgrPpDto;
import com.fishingwithme.infrastructure.dtos.AgrVersionDto;
import com.fishingwithme.infrastructure.dtos.CreditLevelRuleDto;
import com.fishingwithme.infrastructure.dtos.CreditRuleDto;
import com.fishingwithme.infrastructure.dtos.FeedbackListDto;
import com.fishingwithme.infrastructure.dtos.SaveAgrRequest;
import com.fishingwithme.infrastructure.dtos.UpdateAgrRequest;
import com.baomidou.mybatisplus.core.metadata.IPage;

import java.util.List;

public interface SettingsService {

    /**
     * 获取所有等级规则
     * @return 等级规则列表
     */
    List<CreditLevelRuleDto> getLevelRules();

    /**
     * 获取所有积分规则
     * @return 积分规则列表
     */
    List<CreditRuleDto> getCreditRules();

    /**
     * 分页查询反馈列表
     * @param pageNum 页码
     * @param pageSize 每页数量
     * @return 反馈列表分页结果
     */
    IPage<FeedbackListDto> getFeedbackList(int pageNum, int pageSize);

    /**
     * 根据类型查询协议
     * @param type 协议类型，可为空
     * @return 协议列表
     */
    List<AgrPpDto> getAgr(String type);
    
    /**
     * 保存隐私政策/用户协议
     * @param request 保存请求
     * @return 是否保存成功
     */
    boolean saveAgr(SaveAgrRequest request);
    
    /**
     * 更新隐私政策/用户协议
     * @param request 更新请求
     * @return 是否更新成功
     */
    boolean updateAgr(UpdateAgrRequest request);
    
    /**
     * 根据类型获取单个启用的协议
     * @param type 协议类型，不能为空
     * @return 协议对象，如不存在则返回null
     */
    AgrPpDto getAgrByType(String type);
    
    /**
     * 根据类型查询所有版本号和启用状态的列表
     * @param type 协议类型，不能为空
     * @return 协议版本列表
     */
    List<AgrVersionDto> getAgrVersionsByType(String type);

    AgrPpDto newVersion(Long id);

    AgrPpDto getAgrById(Long id);

    Boolean enableAgr(Long id, Boolean enabled);

    IPage<AgrPpDto> listAgrs(int pageNum, int pageSize, String type, Boolean enabled);
}